package view; import javax.swing.*; import java.awt.*; import java.awt.geom.GeneralPath; /** * * @author Ghiurutan Draw graph class. * */ @SuppressWarnings("serial") public class Graph extends JPanel { private static final int HEIGHT = 400; private static final int WIDTH = 400; private static final Point ORIGIN = new Point(WIDTH / 2, HEIGHT / 2); private double[] xCoordinates; private double[] yCoordinates; private static double STEP = 0.2; public Graph() { // Setting the xCoordinates for the drawing,according to our ORIGIN // value. initializeXCoordinates(); } @Override public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; // Draw the lines in the coordinate system g2d.setColor(Color.BLACK); g2d.drawLine(ORIGIN.x, ORIGIN.y, WIDTH, HEIGHT / 2); g2d.drawLine(ORIGIN.x, ORIGIN.y, 0, HEIGHT / 2); g2d.drawLine(ORIGIN.x, ORIGIN.y, WIDTH / 2, 0); g2d.drawLine(ORIGIN.x, ORIGIN.y, WIDTH / 2, HEIGHT); drawAxis(g2d); plotPolynomial(g2d); } private void drawAxis(Graphics2D g2d) { for (int i = 0; i <= 10; i++) { g2d.drawString("" + i, ORIGIN.x + (20 * i), ORIGIN.y - 5); g2d.drawLine(ORIGIN.x + (20 * i), HEIGHT / 2, ORIGIN.x + (20 * i), HEIGHT / 2 - 3); } for (int i = 1; i <= 10; i++) { g2d.drawString("-" + i, ORIGIN.x - (20 * i), ORIGIN.y - 5); g2d.drawLine(ORIGIN.x - (20 * i), HEIGHT / 2, ORIGIN.x - (20 * i), HEIGHT / 2 - 3); } for (int i = 1; i <= 10; i++) { g2d.drawString("" + i, HEIGHT / 2 + 5, ORIGIN.y - (19 * i)); g2d.drawLine(WIDTH / 2, ORIGIN.y - (20 * i), WIDTH / 2 + 3, ORIGIN.y - (20 * i)); } for (int i = 1; i <= 10; i++) { g2d.drawString("-" + i, WIDTH / 2 + 5, ORIGIN.y + (20 * i)); g2d.drawLine(HEIGHT / 2, ORIGIN.y + (20 * i), HEIGHT / 2 + 3, ORIGIN.y + (20 * i)); } } private void plotPolynomial(Graphics2D g2d) { for (int i = 0; i < 100; i++) { xCoordinates[i] = 200 + 20 * xCoordinates[i]; yCoordinates[i] = 200 - 20 * yCoordinates[i]; } GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD, xCoordinates.length); g2d.setColor(Color.RED); path.moveTo(xCoordinates[0], yCoordinates[0]); for (int i = 1; i < xCoordinates.length; i++) { path.lineTo(xCoordinates[i], yCoordinates[i]); } g2d.draw(path); } private void initializeXCoordinates() { this.xCoordinates = new double[100]; double j = -10; for (int i = 0; i < 100; i++, j += STEP) { xCoordinates[i] = j; } } public void setYCoordinates(double[] yCoordinates) { this.yCoordinates = yCoordinates; } public double[] getXCoordinates() { return xCoordinates; } public double[] getYCoordinates() { return this.yCoordinates; } }